/*
 * wifi_sta.h
 * 
 * 使用wpa_supplicant管理WiFi客户端(STA)模式的头文件
 */

#ifndef WIFI_STA_H
#define WIFI_STA_H

#include <stdint.h>
#include "wifi_ap.h" // 复用错误码定义

// WiFi STA配置结构体
typedef struct {
    char interface[32];        // WiFi接口名称(如"wlan0")
    char ssid[32];             // 要连接的WiFi名称
    char password[64];         // WiFi密码
    char country_code[4];      // 国家代码(如"CN")
    char wpa_supplicant_path[128]; // wpa_supplicant可执行文件路径
    char config_path[128];     // 配置文件路径
} wifi_sta_config_t;

// WiFi STA状态结构体
typedef struct {
    int connected;             // 连接状态(0=未连接，1=已连接)
    int pid;                   // wpa_supplicant进程ID
    char ip_address[16];       // 获取的IP地址
    wifi_sta_config_t config;  // 当前配置
} wifi_sta_state_t;

/**
 * 初始化WiFi STA配置为默认值
 * \param config 配置结构体指针
 * 
eturn 成功返回WIFI_AP_SUCCESS，失败返回错误码
 */
wifi_ap_error_t wifi_sta_init_config(wifi_sta_config_t *config);

/**
 * 创建wpa_supplicant配置文件
 * \param config 配置结构体
 * 
eturn 成功返回WIFI_AP_SUCCESS，失败返回错误码
 */
wifi_ap_error_t wifi_sta_create_config_file(const wifi_sta_config_t *config);

/**
 * 启动WiFi STA模式并连接到指定WiFi
 * \param config 配置结构体
 * \param state 状态结构体指针，用于存储运行状态
 * 
eturn 成功返回WIFI_AP_SUCCESS，失败返回错误码
 */
wifi_ap_error_t wifi_sta_start(const wifi_sta_config_t *config, wifi_sta_state_t *state);

/**
 * 停止WiFi STA模式
 * \param state 状态结构体指针
 * 
eturn 成功返回WIFI_AP_SUCCESS，失败返回错误码
 */
wifi_ap_error_t wifi_sta_stop(wifi_sta_state_t *state);

/**
 * 检查WiFi STA连接状态
 * \param state 状态结构体指针
 * 
eturn 成功返回WIFI_AP_SUCCESS，失败返回错误码
 */
wifi_ap_error_t wifi_sta_check_status(wifi_sta_state_t *state);

/**
 * 获取WiFi接口的IP地址
 * \param interface 接口名称
 * \param ip_address 存储IP地址的缓冲区
 * \param buf_size 缓冲区大小
 * 
eturn 成功返回WIFI_AP_SUCCESS，失败返回错误码
 */
wifi_ap_error_t wifi_sta_get_ip_address(const char *interface, char *ip_address, size_t buf_size);

/**
 * 清理临时文件和资源
 * \param config 配置结构体
 * 
eturn 成功返回WIFI_AP_SUCCESS，失败返回错误码
 */
wifi_ap_error_t wifi_sta_cleanup(const wifi_sta_config_t *config);

#endif /* WIFI_STA_H */